<template>
  <div class="webSocket-container">
    <el-row :gutter="20">
      <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
        <el-alert type="success" :closable="false">
          webSocket连接{{ status }}！
        </el-alert>
        <br />
        <el-form ref="form" :model="form" :rules="rules" label-width="100px">
          <el-form-item label="地址">
            <el-input v-model="url" disabled></el-input>
          </el-form-item>
          <el-form-item label="消息" prop="message">
            <el-input v-model="form.message"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="submit">发送消息 </el-button>
          </el-form-item>
          <el-form-item label="返回信息汇总">
            {{ data }}
          </el-form-item>
        </el-form>
      </el-col>
    </el-row>
  </div>
</template>

<script>
export default {
  name: "WebSocket",
  components: {},
  data() {
    return {
      url: "ws://123.207.136.134:9010/ajaxchattest",
      webSocket: null,
      data: [],
      status: "",
      form: { message: null },
      rules: {
        message: [{ required: true, message: "请输入消息", trigger: "blur" }],
      },
    };
  },
  created() {
    this.init();
  },
  destroyed() {
    this.webSocket.close();
  },
  methods: {
    submit() {
      this.$refs["form"].validate((valid) => {
        if (valid) {
          this.send(this.form.message);
        } else {
          return false;
        }
      });
    },
    init() {
      const wsuri = this.url;
      this.webSocket = new WebSocket(wsuri);
      this.webSocket.onmessage = this.onmessage;
      this.webSocket.onopen = this.onopen;
      this.webSocket.onerror = this.onerror;
      this.webSocket.onclose = this.onclose;
    },
    onopen() {
      this.status = "成功";
    },
    onerror() {
      this.status = "失败";
      this.initWebSocket();
    },
    onmessage({ data }) {
      //截掉测试webSocket地址广告
      this.data.push(data.substring(0, data.length - 66));
    },
    send(Data) {
      this.webSocket.send(Data);
    },
    onclose(e) {
      this.status = "断开";
    },
  },
};
</script>
